// 单一的方法，与业务无关
import * as Cesium from '../../public/cesium/Cesium'

/**
 *建立水的面数据
 * @param {水的数据} waterArray
 */
function waterPolygon(waterArray) {
  const River1Point = [
    107.11669921875,
    26.09625490696853,
    122.14599609375001,
    26.09625490696853,
    122.14599609375001,
    35.94243575255426,
    107.11669921875,
    35.94243575255426,
    107.11669921875,
    26.09625490696853,
  ]
  const _waterPolygon = new Cesium.PolygonGeometry({
    polygonHierarchy: waterArray, // new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(waterArray)),
    // hierarchy:x,
    // extrudedHeight: 500, // 与height不能同时存在，否则height不生效 表示水体的厚度
    height: 10,
    // perPositionHeight: false, // 预先高度
    // outline: true,
    // outlineWidth: 1000000,
    // fill: true,
    // arcType: Cesium.ArcType.RHUMB,
    // material: Cesium.Color.GREEN,
    vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
  })
  return _waterPolygon
}

// 水的材质
// function applyWaterMaterial() {
//   const _material = new Cesium.Material({
//     fabric: {
//       type: 'Water',
//       uniforms: {
//         // baseWaterColor: new Cesium.Color('#ff0000'), // rgba颜色对象水的基色。
//         // blendColor: new Cesium.Color('#333333'), // 从水到非水区域混合时使用的rgba颜色对象。
//         normalMap: require('../assets/imgs/waterNormals.jpg'), // 水正常扰动的法线贴图。
//         frequency: 1000.0, // 控制波数的数字
//         animationSpeed: 0.01, // 控制水上动画速度的数字。
//         amplitude: 10.0, // 控制水波振幅的数字
//         // specularMap: '', // 单通道纹理，用于指示水域。
//         // specularIntensity: ''// 控制镜面反射强度的数字。
//       },
//     },
//   })
//   return _material
// }
function applyWaterMaterial() {
  const _material = new Cesium.Material({
    fabric: {
      type: 'Grid',
      uniforms: {
        color: new Cesium.Color(1.0, 2.0, 0.0, 1.0),
        lineCount: new Cesium.Cartesian2(166, 109), //(166, 109), //
      },
    },
  })
  return _material
}

// 图元表示 场景 中的几何
function applyWaterPrimitive(_waterPolygon) {
  const _rivers = new Cesium.Primitive({
    // 要渲染的几何实例-或单个几何实例
    geometryInstances: new Cesium.GeometryInstance({
      geometry: _waterPolygon,
    }),
    // 用于渲染图元的外观
    // 椭球表面上的几何外观
    appearance: new Cesium.EllipsoidSurfaceAppearance({
      // 相对地图表面，不是海拔
      aboveGround: true,
    }),
    show: true,
  })
  return _rivers

  // const _rivers = new Cesium.Primitive({
  //   geometryInstances: new Cesium.GeometryInstance({
  //     geometry: new Cesium.RectangleGeometry({
  //       rectangle: Cesium.Rectangle.fromDegrees(-180.0, -90.0, 180.0, 90.0),
  //       vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
  //     })
  //   }),
  //   appearance: new Cesium.EllipsoidSurfaceAppearance({
  //     aboveGround: true
  //   }),
  //   show: true
  // })
  // return _rivers
}

// 添加水流
export const addWater = function addWater(mapView, riverArray, holesArray) {
  // 河道多边形
  // const riverArrays = JSON.parse(riverArray)
  // console.log(riverArray)
  const position = Cesium.Cartesian3.fromDegreesArray(riverArray)
  // const holes = Cesium.Cartesian3.fromDegreesArray(holesArray)
  const waterArray = {
    positions: position,
    // holes: [{ positions: holes }]
  }
  // 建立水的面数据
  const _waterPolygon = waterPolygon(waterArray)
  // 图元表示 场景 中的几何 水
  const _rivers = applyWaterPrimitive(_waterPolygon)
  // 水的材质
  const _river1Material = applyWaterMaterial()

  _rivers.appearance.material = _river1Material
  mapView.scene.primitives.add(_rivers)
}
